1. РАБОТА С ТАБЛИЦАМИ JTable

Компонент JTable предназначен для отображения данных в виде таблицы.

п/п

Свойство

Назначение

1.

model

МОДЕЛЬ ТАБЛИЦЫ

2.

selectionModel

Выбор режима выделения данных (выбрать «Одиночное выделение»)

3.

autoResizeMode

Режим масштабирования ширины столбцов таблицы:

установить в «OFF» - использовать заданные размеры столбцов, не использовать авто масштабирование столбцов;

SUBSEQUENT_COLUMNS – вписать все столбцы в размер таблицы, используя авто масштабирование.

4.

showHorizontalLines

Показать горизонтальные линии сетки (да)

5.

showVerticalLines

Показать вертикальные линии сетки (да)

6.

autoCreateRowSorter

Разрешить сортировку строк по щелчку на заголовке столбца (нет)

7.

tableHeader

Разрешить менять мышью столбцы местами и их ширину (нет)

8.

cellSelectionEnabled

Разрешить выделять ячейку (да)

9.

columnSelectionAllowed

Разрешит выбирать столбец (да)

10.

rowSelectionAllowed

Разрешить выбирать строку (да)

11.

border

Рамка над областью с данными (установить в «LineBorder»)

12.

fillsViewportHeight

Заливать фоном свободные от строк области компонента

13.

columnCount

Количество колонок (только чтение)

14.

rowCount

Количество строк (только для чтения)

15.

rowHeight

Высота строк

16.

font

Шрифт текста

17.

foreground

Цвет текста

18.

background

Цвет фона

19.

gridColor

Цвет сетки

20.

selectionBackground

Цвет фона выделенной ячейки

21.

selectionForeground

Цвет текста выделенной ячейки

22.

enabled

Доступность компонента

23.

opaque

Непрозрачность фона

24.

focusable

Разрешение фокуса ввода с клавиатуры

25.

cursor

Вид курсора над компонентом

26.

componentPopupMenu

Привязка компонента всплывающего меню

27.

toolTipText

Всплывающая подсказка над компонентом

При добавлении таблицы NetBeans автоматически добавляет компонент «JScrollPane», в который встраивает «JTable». Компонент «JScrollPane» необходим для добавления возможности горизонтальной и вертикальной прокрутки у таблицы и не требует какой-либо отдельной настройки.

ПРИМЕЧАНИЕ: При использовании у формы (JFrame) стиля по умолчанию «Nimbus» линии сетки отображаться не будут. Необходимо выбрать любой другой стиль, например «Windows»!

Установка внешнего вида окна в стиле «Windows»

Для установки внешнего вида окна в стиле «Windows», необходимо зайти в программный код окна (вкладка «Источник»), раскрыть весь программный код (нажав на значки «+»), и найти следующий фрагмент кода:

 

if ("Nimbus".equals(info.getName())) {

javax.swing.UIManager.setLookAndFeel(info.getClassName());

break;

}

Далее, необходимо заменить слово "Nimbus" на слово «Windows», соблюдая регистр символов:

1.1. СТАНДАРТНАЯ МОДЕЛЬ ТАБЛИЦЫ JTable

Для того чтобы задать стандартную двумерную модель таблицы, необходимо войти в свойство «model» таблицы, выбрать режим «Изменяемый код» и вписать в открывшееся поле значение «new DefaultTableModel(7, 5)», где первая цифра - желаемое количество строк, вторая цифра – желаемое количество столбцов. Нажать кнопку «OK».

Данная стандартная модель позволяет динамически (программно) добавлять и удалять строки и столбцы таблицы.

1.2. ПОЛЬЗОВАТЕЛЬСКАЯ МОДЕЛЬ ТАБЛИЦЫ JTable

Для того чтобы задать пользовательскую модель таблицы – т.е. то, что она должна хранить и отображать, необходимо войти в свойство «model» , выбрать режим «Редактор модели таблицы» и указать желаемое количество строк, столбцов, тип столбцов (полей):

1.2.1. Настройка пользовательских полей таблицы JTable

Для того, чтобы детально настроить содержимое таблицы (структуру и тип ее колонок, количество строк, столбцов, ширину каждого столбца) необходимо щелкнуть на таблице правой кнопкой мыши, в появившемся контекстном меню выбрать опцию «Содержание таблицы» и произвести в открывшемся окне необходимые настройки:

ПРИМЕЧАНИЕ: если использовать в типах столбцов какое-либо значение, кроме «Object», то возможность динамически (программно) менять количество столбцов в таблице будет недоступна. Поэтому, указывать конкретный тип столбцов вместо общего типа «Object» целесообразно для случаев, когда таблица должна сама контролировать вводимые данные (например, для полей типа «Integer») и нет необходимости программно менять количество столбцов в таблице. Если необходимо программно менять количество столбцов в таблице, то все поля в модели должны быть типа «Object» и автоматической проверки данных таблица осуществлять не будет.

1.3. ВЫКЛЮЧЕНИЕ ЗАГОЛОВКОВ В ТАБЛИЦЕ JTable

Для того чтобы убрать у таблицы заголовок с названиями столбцов, необходимо зайти в свойство «tableHeader», установить свойство из режима «Редактор заголовка таблицы» в режим «Изменяемый код» и вписать в открывшееся поле значение «null»:

1.4. ПРИМЕРЫ РАБОТЫ С ТАБЛИЦАМИ JTable

1.4.1. Случайные числа в JTable

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

// Случайные числа в JTable

long k;

for (int i = 0; i < jTable1.getRowCount(); i++) {

for (int j = 0; j < jTable1.getColumnCount(); j++) {

k = Math.round(Math.random() * 10);

jTable1.setValueAt(String.valueOf(k), i, j);

}

}

// jButton2ActionPerformed(null);

}

1.4.2. Сумма цифр в JTable

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {

// Сумма цифр в JTable

long s = 0;

try {

for (int i = 0; i < jTable1.getRowCount(); i++) {

for (int j = 0; j < jTable1.getColumnCount(); j++) {

s += Integer.parseInt(jTable1.getValueAt(i, j).toString());

}

}

jLabel1.setText(String.valueOf(s));

} catch (Exception ee) {

jLabel1.setText("Error");

}

}

1.4.3. Добавление и вставка строк в JTable

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {

// Добавить и вставка строк в JTable

DefaultTableModel dtm = new DefaultTableModel();

dtm = (DefaultTableModel) jTable1.getModel();

dtm.setRowCount(dtm.getRowCount() + 1); // Добавить в конец новую строку

dtm.insertRow(1, new Object [] {"Первый столбец","123"}); // Вставить во 2 строку новую строку

}

1.4.4. Удаление и перемещение строк в JTable

private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {

// Удаление и перемещение строк в JTable

DefaultTableModel dtm = new DefaultTableModel();

dtm = (DefaultTableModel) jTable1.getModel();

try {

dtm.setRowCount(dtm.getRowCount() - 1); // Удалить последнюю строку

dtm.removeRow(1); // Удалить 2 строку

dtm.moveRow(0, 2, 3); // Переместить строки 1,2,3 за строкой 4

} catch (Exception e) {;

}

}

1.4.5. Добавление в конец нового столбца в JTable

Только для стандартной модели «new DefaultTableModel(кол_строк, кол_столбцов)»
или пользовательской модели со всеми столбцами типа «
Object»

private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {

// Добавить столбец в JTable

DefaultTableModel dtm = (DefaultTableModel) jTable1.getModel();

dtm.addColumn("New");

}

1.4.6. Удалить последний столбец в JTable

Только для стандартной модели «new DefaultTableModel(кол_строк, кол_столбцов)»
или пользовательской модели со всеми столбцами типа «
Object»

private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {

// Удалить столбец в JTable

DefaultTableModel dtm = new DefaultTableModel();

dtm = (DefaultTableModel) jTable1.getModel();

try {

dtm.setColumnCount(dtm.getColumnCount() - 1);

} catch (Exception e) {

}

}

1.4.7. Выбор ячейки мышью в JTable

private void jTable1_mouseClicked(java.awt.event.MouseEvent evt) {

// Выбор ячейки мышью в JTable

int row = jTable1.getSelectedRow(); // определяем какая строка выбрана

int column = jTable1.getSelectedColumn(); // определяем какой столбец

jLabel2.setText("Значение: " + jTable1.getValueAt(row, column));

}

1.4.8. Выбор ячейки клавиатурой в JTable

private void jTable1KeyReleased(java.awt.event.KeyEvent evt) {

// Выбор ячейки клавиатурой в JTable

// jTable1_mouseClicked(null);

int row = jTable1.getSelectedRow(); // определяем какая строка выбрана

int column = jTable1.getSelectedColumn(); // определяем какой столбец

jLabel2.setText("Значение: " + jTable1.getValueAt(row, column));

}

1.4.9. Инициализация таблицы в JTable

private void formWindowOpened(java.awt.event.WindowEvent evt) {

// Инициализация таблицы в JTable

for (int i = 0; i < jTable1.getColumnCount(); i++) {

// Установка ширины столбцов

jTable1.getColumnModel().getColumn(i).setPreferredWidth(60);

// jTable1.getColumnModel().getColumn(i).setMaxWidth(60);

// jTable1.getColumnModel().getColumn(i).setMinWidth(60);

}

for (int i = 0; i < jTable1.getRowCount(); i++) {

// Установка высоты строк

jTable1.setRowHeight(i, 18);

}

for (int i = 0; i < jTable1.getRowCount(); i++) {

for (int j = 0; j < jTable1.getColumnCount(); j++) {

jTable1.setValueAt("0", i, j);

}

}

}

1.4.10. Обработка данных в таблице JTable

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {

// Обработка данных в таблице JTable

double fk = 1, sum = 0, pr = 1, y = 0;

for (int i = 0; i < jTable1.getRowCount(); i++) {

if (jTable1.getValueAt(i, 0) == null) {

JOptionPane.showMessageDialog(rootPane, "Проверьте правильностью заполнения столбца К(i)", "Ошибка ввода", JOptionPane.ERROR_MESSAGE);

return;

}

}

for (int i = 0; i < jTable1.getRowCount(); i++) {

sum += Integer.parseInt(jTable1.getValueAt(i, 0).toString()); // Расчет суммы

try {

pr *= Integer.parseInt(jTable1.getValueAt(i, 0).toString()); // Расчет произведения

fk *= i + 1; // Расчет факториала

y = (Math.sqrt((pr - sum) / fk) / (i + 1)) * (Math.pow(Math.tan((i + 1) / 2), 2)); // Расчет по заданной формуле

jTable1.setValueAt(

BigDecimal.valueOf(y).setScale(2, BigDecimal.ROUND_HALF_DOWN).doubleValue(), i, 1); // Вывод результата

} catch (Exception e) {

jTable1.setValueAt(0, i, 1);

}

}

}